package com.zenithmind.library.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zenithmind.library.pojo.domain.BookAuthor;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 图书作者关联Mapper接口
 * 
 * @author ZenithMind
 * @since 2024-06-14
 */
@Mapper
public interface BookAuthorMapper extends BaseMapper<BookAuthor> {

    /**
     * 根据图书ID查询作者关联
     * 
     * @param bookId 图书ID
     * @return 作者关联列表
     */
    List<BookAuthor> selectByBookId(@Param("bookId") String bookId);

    /**
     * 根据作者ID查询图书关联
     * 
     * @param authorId 作者ID
     * @return 图书关联列表
     */
    List<BookAuthor> selectByAuthorId(@Param("authorId") String authorId);

    /**
     * 检查图书作者关联是否存在
     * 
     * @param bookId 图书ID
     * @param authorId 作者ID
     * @return 关联数量
     */
    int countBookAuthor(@Param("bookId") String bookId, @Param("authorId") String authorId);

    /**
     * 根据图书ID删除所有作者关联
     * 
     * @param bookId 图书ID
     * @return 删除行数
     */
    int deleteByBookId(@Param("bookId") String bookId);

    /**
     * 根据作者ID删除所有图书关联
     * 
     * @param authorId 作者ID
     * @return 删除行数
     */
    int deleteByAuthorId(@Param("authorId") String authorId);

    /**
     * 批量插入图书作者关联
     * 
     * @param bookAuthors 图书作者关联列表
     * @return 插入行数
     */
    int batchInsert(@Param("bookAuthors") List<BookAuthor> bookAuthors);

    /**
     * 更新作者在图书中的排序
     * 
     * @param bookId 图书ID
     * @param authorId 作者ID
     * @param sortOrder 排序号
     * @return 更新行数
     */
    int updateSortOrder(@Param("bookId") String bookId, 
                       @Param("authorId") String authorId, 
                       @Param("sortOrder") Integer sortOrder);

    /**
     * 统计作者的图书数量
     * 
     * @param authorId 作者ID
     * @return 图书数量
     */
    int countBooksByAuthor(@Param("authorId") String authorId);

    /**
     * 统计图书的作者数量
     * 
     * @param bookId 图书ID
     * @return 作者数量
     */
    int countAuthorsByBook(@Param("bookId") String bookId);
}
